The present invention relates to the field of computer graphics, and in particular to methods and apparatus for authoring and editing animation of computer graphics models. Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time.
In computer-generated animation, an object's appearance is defined by a two or three-dimensional computer model. To appear realistic, the computer model of an object is often extremely complex, having millions of surfaces and tens of thousands of attributes. Due to the complexity involved with animating such complex models, particularly character models with hundreds or thousands of degrees of freedom, animation software tools often rely on animation variables, which are sometimes referred to as avars, and associated animation variable functions to define the attributes of objects. Animation variable functions associate input values to a corresponding output values according to some rule, function, algorithm, or mathematical expression. To create animation, the values of animation variables may change as functions of animation time.
For example, animation variables and their associated functions can specify relatively simple motions, such as the translation and rotation of objects. For example, animation variables can specify the rotation angles of the joints of a character model, thereby positioning the character model's limbs and appendages. Animation variables and their associated functions are also used to abstract complicated modifications to a model to a relatively simple control. For example, a complicated animation variable can define the degree of opening of a character's mouth. In this example, the value of a single animation variable is provided to one or more animation variable functions to determine the positions of many different parts of the character model needed to open the characters mouth to the desired degree. In this example, animation software tools then modify the character model according to the outputs of the animation variable functions to produce a character model posed with an open mouth.
In typical animation software applications, users define computer graphics images and animated sequences by specifying the values of animation variables of an object, and hence the pose of an object, at one or more key frames. A animation variable value and its associated input value, such as an animation time or frame value, is referred to as a knot. A set of one or more knots at a given input value defined by a user or another application, such as a simulation or an inverse kinematic system, is referred to as an authored pose of an object.
Based on the authored poses of one or more objects, an animation system determines the poses of object for frames, time values, or any other type of input values where authored poses are not defined. Typically, animation systems interpolate the values of its animation variables from its knot values. A variety of different interpolation schemes are used in animation, including linear, cubic, b-spline, Bezier, and Catmull-Rom. Typically, animation tools will display the values of animation variables as a line or curve, such as a spline curve, defined by the values of one or more of its knots and the interpolation scheme.
The poses of some types of models, such as character models, may be defined using complex hierarchies of joints and other animation entities, such as deformation and simulation functions. The hierarchy of joints and other animation entities is referred to as animation hierarchy. For example, a character model can include a shoulder joint connected between a torso model and an upper arm model, an elbow joint connected between the upper arm model and a lower arm model, a wrist joint connected between the lower arm model and a hand model, and several finger joints connected between the hand model and finger models. The pose or position and orientation of all of these portions of the character model's arm is specified at least in part by the joint rotation angles and/or joint positions of the shoulder joint, the elbow joint, the wrist joint, and the finger joints.
One difficulty with posing models with complex animation hierarchies arises when a scene requires a model to be fixed or attached to an external reference point. Most animation hierarchies have a single root joint or node. The other joints or nodes in the animation hierarchy are translated and rotated relative to this root node. If the portion of the model attached to the external reference point does not correspond with the root joint of the animation hierarchy, posing and animating the model can be difficult and counter-intuitive.
For example, a scene may require a character model to be hanging by one hand from another object, such as a tree branch. In this example scene, it would be desirable for animators to specify the joint positions and rotations relative to the hand of the character model. For example, an animator might desire to specify the position and rotation of the elbow joint relative to the hand. However, if the root node of the animation hierarchy corresponds with a different portion of the model, such as the hips of the character model, then the origins or centers of rotations for joints make this type of relative positioning and rotation difficult. For example, although an animator may desire to specify the rotation of the elbow joint relative to the hand, the placement of the root node of the animator hierarchy at the hips of the character model forces the origin of the elbow joint rotation to be located in the shoulder of the character model. Thus, to achieve the example desired relative rotation of the elbow joint around the hand, prior animation systems required the animator to specify a first joint rotation angle of the elbow joint relative to the shoulder joint, a second joint rotation angle of the hand relative to the elbow joint to place the hand at the desired external point, and many other joint rotations and positions to ensure that the rest of the character model is correctly positioned and orientated with respect to the external reference point.